home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / windows / comms / recomm10.arj / COMMFNC.DBC < prev    next >
Text File  |  1993-10-22  |  17KB  |  762 lines

  1. #define DLL_MAIN    
  2.  
  3. #include "re_comm.h"
  4. #include <stdlib.h>
  5.  
  6. #define INICOM     1
  7. #define SETCOM     2
  8. #define SETQUE     3
  9. #define RECCOM     4
  10. #define SNDCOM     5
  11. #define CTX        6
  12. #define TRMCOM    7
  13. #define STACOM    8
  14. #define CEXTFCN 9
  15. #define CFLUSH    10
  16. #define CEVT     11
  17. #define CEVTGET 12
  18. #define CSETBRK 13
  19. #define CCLRBRK 14
  20. #define GETDCB  15
  21. #define CWSTRING 16
  22. #define CRSTRING 17
  23. #define ENABLENOTI 18
  24.  
  25. DCB dcb;
  26. HINSTANCE hUser;
  27.  
  28.  
  29.  
  30. int event = 0;
  31. int huge * lpevent;
  32.  
  33. int sendData();
  34. char debug[60];
  35. BOOL REMOTE_RUNNING = FALSE;
  36.  
  37. HWND hNoti = NULL;
  38.  
  39. HWND     (FAR PASCAL * lpFindWindow)(LPSTR, LPSTR);
  40. int      (FAR PASCAL * lpMessageBox)(HWND, LPSTR, LPSTR, UINT);
  41. void     (FAR PASCAL * lpPostQuitMessage)(int);
  42. LRESULT (FAR PASCAL * lpSendMessage)(HWND, UINT, WPARAM, LPARAM);    
  43. long    (FAR PASCAL * lpGetTickCount)();
  44. int     (FAR * lpwsprintf)(LPSTR, LPSTR, ...);
  45.  
  46.  
  47.  
  48. LPSTR numtoA(int x)
  49. {
  50.     static char zahl[] = "0123456789";
  51.     static char num[20];
  52.     int y;
  53.     
  54.     _fmemcpy(num, "                 \n\n\0", 20);
  55.     y = 10;
  56.     
  57.     while(x > 0)
  58.     {
  59.         num[y--] =     zahl[x % 10];
  60.         x /= 10;
  61.     }   
  62.     return(num);  
  63. }    
  64.  
  65. int far pascal inicom(DCB far * lpdcb)
  66. {
  67.     WORD (far pascal * lpfn)(DCB far * lpdcb);
  68.     
  69.     hUser = LoadLibrary("USER.EXE");
  70.     (FARPROC)lpwsprintf = (FARPROC)GetProcAddress(hUser, "_wsprintf");
  71.     FreeLibrary(hUser);
  72.                            
  73.     lpwsprintf(debug, "inicom %d\n", lpdcb->Id);
  74.     OutputDebugString(debug);
  75.     
  76.     if(lpdcb->Id == REMOTE_COM)
  77.     {    
  78.         comData.fnc = INICOM;
  79.         
  80.         _fmemcpy(&comData.a.dcb, lpdcb, sizeof(comData.a.dcb));
  81.         
  82.         if(sendData() == FALSE) return IE_HARDWARE;
  83.         
  84.         _fmemcpy(lpdcb, &comData.a.dcb, sizeof(comData.a.dcb));
  85.         
  86.         return(LOWORD(comData.rc));
  87.     }
  88.     
  89.     if(hCm > HINSTANCE_ERROR)
  90.     {
  91.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(1, 0));
  92.         if((FARPROC)lpfn != (FARPROC)NULL)
  93.         {
  94.             return (*lpfn)(lpdcb);
  95.         }
  96.     }
  97.     return IE_HARDWARE;    
  98. }
  99. int far pascal setcom(DCB far * lpdcb)
  100. {    
  101.     WORD (far pascal * lpfn)(DCB far * lpdcb);
  102.     
  103.     hUser = LoadLibrary("USER.EXE");
  104.     (FARPROC)lpwsprintf = (FARPROC)GetProcAddress(hUser, "_wsprintf");
  105.     FreeLibrary(hUser);
  106.                            
  107.     lpwsprintf(debug, "setcom %d\n", lpdcb->Id);
  108.     OutputDebugString(debug);
  109.     
  110.     if(lpdcb->Id == REMOTE_COM)
  111.     {    
  112.         comData.fnc = SETCOM;
  113.         
  114.         _fmemcpy(&comData.a.dcb, lpdcb, sizeof(comData.a.dcb));
  115.         
  116.         if(sendData() == FALSE) return IE_HARDWARE;
  117.         
  118.         _fmemcpy(lpdcb, &comData.a.dcb, sizeof(comData.a.dcb));
  119.         
  120.         return(LOWORD(comData.rc));
  121.     }
  122.     if(hCm > HINSTANCE_ERROR)
  123.     {
  124.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(2, 0));
  125.         if((FARPROC)lpfn != (FARPROC)NULL)
  126.         {
  127.             return (*lpfn)(lpdcb);
  128.         }
  129.     }
  130.     return IE_HARDWARE;    
  131. }
  132. int far pascal setque(int cid, QDB FAR * lpqdb )
  133. {
  134.     int (far pascal * lpfn)(int cid, QDB FAR * lpqdb );
  135.     
  136.     hUser = LoadLibrary("USER.EXE");
  137.     (FARPROC)lpwsprintf = (FARPROC)GetProcAddress(hUser, "_wsprintf");
  138.     FreeLibrary(hUser);
  139.                            
  140.     lpwsprintf(debug, "setque %d\n", cid);
  141.     OutputDebugString(debug);
  142.         
  143.     if(cid == REMOTE_COM)
  144.     {    
  145.         comData.fnc = SETQUE;
  146.         
  147.         _fmemcpy(&comData.a.qdb, lpqdb, sizeof(comData.a.qdb));
  148.         
  149.         if(sendData() == FALSE) return IE_BADID;
  150.         
  151.         _fmemcpy(lpqdb, &comData.a.qdb, sizeof(comData.a.qdb));
  152.         
  153.         return(LOWORD(comData.rc));
  154.     }
  155.     
  156.     if(hCm > HINSTANCE_ERROR)
  157.     {
  158.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(3, 0));
  159.         if((FARPROC)lpfn != (FARPROC)NULL)
  160.         {
  161.             return (*lpfn)(cid, lpqdb );
  162.         }
  163.     }
  164.     return IE_BADID;    
  165. }
  166. int far pascal reccom(int cid)
  167. {
  168.     int (far pascal * lpfn)(int cid);
  169.     
  170.     OutputDebugString("reccom\n");
  171.     
  172.     if(cid == REMOTE_COM)
  173.     {    
  174.         comData.fnc = RECCOM;
  175.         
  176.         if(sendData() == FALSE) return -1;
  177.         
  178.         return (comData.a.x);
  179.     }
  180.     if(hCm > HINSTANCE_ERROR)
  181.     {
  182.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(4, 0));
  183.         if((FARPROC)lpfn != (FARPROC)NULL)
  184.         {
  185.             return (*lpfn)(cid);
  186.         }
  187.     }
  188.     return -1;    
  189. }
  190. int far pascal sndcom(int cid, int ch)
  191. {
  192.     WORD (far pascal * lpfn)(int cid, int ch);
  193.     
  194.     OutputDebugString("sndcom\n"); 
  195.     OutputDebugString(numtoA(cid));
  196.     
  197.     if(cid == REMOTE_COM)
  198.     {    
  199.         comData.fnc = SNDCOM;
  200.         comData.a.x = ch;
  201.         if(sendData() == FALSE) return -1;
  202.         
  203.         return(LOWORD(comData.rc));
  204.     }
  205.     
  206.     if(hCm > HINSTANCE_ERROR)
  207.     {
  208.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(5, 0));
  209.         if((FARPROC)lpfn != (FARPROC)NULL)
  210.         {
  211.             return (*lpfn)(cid, ch);
  212.         }
  213.     }
  214.     return -1;    
  215. }
  216. WORD far pascal ctx(int cid, int ch)
  217. {    WORD (far pascal * lpfn)(int cid, int ch);
  218.  
  219.     OutputDebugString("ctx\n");    
  220.     OutputDebugString(numtoA(cid));
  221.     
  222.     if(cid == REMOTE_COM)
  223.     {    
  224.         comData.fnc = CTX;
  225.         comData.a.x = ch;
  226.         if(sendData() == FALSE) return 0x8000;
  227.         
  228.         return(LOWORD(comData.rc));
  229.     }
  230.     
  231.     if(hCm > HINSTANCE_ERROR)
  232.     {
  233.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(6, 0));
  234.         if((FARPROC)lpfn != (FARPROC)NULL)
  235.         {
  236.             return (*lpfn)(cid, ch);
  237.         }
  238.     }
  239.     return 0x8000;    
  240. }
  241.  
  242. int far pascal trmcom(int cid)
  243. {
  244.     int (far pascal * lpfn)(int cid);
  245.     int rc;
  246.     
  247.     OutputDebugString("trmcom"); 
  248.     OutputDebugString(numtoA(cid));
  249.     
  250.     if(cid == REMOTE_COM)
  251.     {    
  252.         comData.fnc = TRMCOM;
  253.         
  254.         if(sendData() == FALSE) return 0x8000;
  255.         
  256.         return (LOWORD(comData.rc));
  257.     }
  258.     
  259.     rc = 0x8000;
  260.     
  261.     if(hCm > HINSTANCE_ERROR)
  262.     {
  263.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(7, 0));
  264.         if((FARPROC)lpfn != (FARPROC)NULL)
  265.         {
  266.             rc = (*lpfn)(cid);
  267.         }
  268.     }
  269.     return rc;    
  270.     
  271. }
  272. WORD far pascal stacom(int cid, COMSTAT FAR * cs)
  273. {
  274.     WORD (far pascal * lpfn)(int cid, COMSTAT FAR * cs);
  275.     
  276.     OutputDebugString("stacom");
  277.     OutputDebugString(numtoA(cid));
  278.     lpwsprintf(debug, "evmak -> %d\n", event);
  279.     OutputDebugString(debug);
  280.     
  281.     if(cid == REMOTE_COM)
  282.     {    
  283.         comData.fnc = STACOM;
  284.                       
  285.         if(cs != (COMSTAT FAR *)NULL)
  286.         {                      
  287.             _fmemcpy(&comData.a.cs, cs, sizeof(comData.a.cs));
  288.         }
  289.         
  290.         if(sendData() == FALSE) 
  291.         {
  292.             return CE_FRAME | CE_MODE | CE_BREAK;
  293.         }
  294.         
  295.         if(cs != (COMSTAT FAR *)NULL)
  296.         {                      
  297.             _fmemcpy(cs, &comData.a.cs, sizeof(comData.a.cs));
  298.         }
  299.         return(LOWORD(comData.rc));
  300.     }
  301.     
  302.     if(hCm > HINSTANCE_ERROR)
  303.     {   
  304.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(8, 0));
  305.         if((FARPROC)lpfn != (FARPROC)NULL)
  306.         {   
  307.             return (*lpfn)(cid, cs);
  308.         }
  309.     }   
  310.     OutputDebugString("stacom UNKOWN !!!\n");
  311.     return CE_IOE;    
  312.     
  313. }
  314. LONG far pascal cextfcn(int cid, int fcn)
  315. {    LONG (far pascal * lpfn)(int cid, int fcn);
  316.     
  317.     int maxcom;                    
  318.     
  319.     comData.fnc = CEXTFCN;
  320.     
  321.     lpfn = NULL;
  322.     if(hCm > HINSTANCE_ERROR)
  323.     {
  324.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(9, 0));
  325.     }
  326.     switch(fcn)
  327.     {
  328.         case CLRDTR:OutputDebugString("cextfcn CLRDTR");
  329.             break;
  330.         case CLRRTS:OutputDebugString("cextfcn CLRRTS");
  331.             break;
  332.         case RESETDEV:OutputDebugString("cextfcn RESETDEV");
  333.             break;
  334.         case SETDTR:OutputDebugString("cextfcn SETDTR");
  335.             break;
  336.         case SETRTS:OutputDebugString("cextfcn SETRTS");
  337.             break;
  338.         case SETXOFF:OutputDebugString("cextfcn SETXOFF");
  339.             break;
  340.         case SETXON:OutputDebugString("cextfcn SETXON");
  341.             break;
  342.         case GETBASEIRQ:OutputDebugString("cextfcn GETBASEIRQ");
  343.             if(cid == REMOTE_COM) 
  344.             {    OutputDebugString(numtoA(cid));
  345.                 return 0L;
  346.             }
  347.             break;
  348.         case GETMAXCOM:OutputDebugString("cextfcn GETMAXCOM");
  349.                 
  350.                 if((FARPROC)lpfn != (FARPROC)NULL)
  351.                 {
  352.                     maxcom = LOWORD((*lpfn)(cid, fcn));
  353.                     OutputDebugString(numtoA(maxcom));
  354.                     return(max(maxcom, REMOTE_COM));
  355.                 }
  356.                 break; 
  357.                  
  358.         case GETMAXLPT:OutputDebugString("cextfcn GETMAXLPT");
  359.                 break;
  360.     }           
  361.     OutputDebugString(numtoA(cid));
  362.     
  363.     lpfn = NULL;
  364.     
  365.     if(cid == REMOTE_COM)
  366.     {                           
  367.         comData.a.x = fcn;
  368.         if(sendData() == FALSE) return -1;
  369.         return(comData.rc);
  370.     }
  371.     if((FARPROC)lpfn != (FARPROC)NULL)
  372.     {
  373.         return (*lpfn)(cid, fcn);
  374.     }
  375.     return -1;    
  376. }
  377. WORD far pascal cflush(int cid, int q)
  378. {    WORD (far pascal * lpfn)(int cid, int q);
  379.  
  380.     OutputDebugString("cflush\n");
  381.     
  382.     if(cid == REMOTE_COM)
  383.     {    
  384.         comData.fnc = CFLUSH;
  385.         comData.a.x = q;
  386.         if(sendData() == FALSE) return 0x8000;
  387.         
  388.         return(LOWORD(comData.rc));
  389.     }
  390.     
  391.     if(hCm > HINSTANCE_ERROR)
  392.     {
  393.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(10, 0));
  394.         if((FARPROC)lpfn != (FARPROC)NULL)
  395.         {
  396.             return (*lpfn)(cid, q);
  397.         }
  398.     }
  399.     return 0x8000;    
  400. }
  401. LPWORD far pascal cevt(int cid, int evtmask)
  402. {    LPWORD (far pascal * lpfn)(int cid, int evtmask);
  403.                                   
  404.     OutputDebugString("cevt\n");
  405.                                       
  406.     if(cid == REMOTE_COM)
  407.     {    
  408.         comData.fnc = CEVT;
  409.         comData.a.x = evtmask;
  410.         if(sendData() == FALSE) return 0;
  411.         
  412.         if(comData.rc == 0) return 0;
  413.         
  414.         lpwsprintf(debug, "cevt -> %d\n", event);
  415.         OutputDebugString(debug);
  416.             
  417.         return ((int huge *)&event);
  418.     }
  419.     
  420.     if(hCm > HINSTANCE_ERROR)
  421.     {
  422.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(11, 0));
  423.         if((FARPROC)lpfn != (FARPROC)NULL)
  424.         {          
  425.             lpevent = (int huge *)(*lpfn)(cid, evtmask);
  426.             lpwsprintf(debug, "cevt -> %lx %d\n", lpevent, *lpevent);
  427.             OutputDebugString(debug);
  428.             return (lpevent);
  429.         }
  430.     }
  431.     return 0;    
  432. }
  433. WORD  far pascal cevtGet(int cid, int evtmask)
  434. {    WORD (far pascal * lpfn)(int cid, int evtmask);
  435.     
  436.     
  437.     lpwsprintf(debug, "cevtGet %d\n", evtmask);
  438.     OutputDebugString(debug);
  439.  
  440.     
  441.     if(cid == REMOTE_COM)
  442.     {    
  443.         comData.fnc = CEVTGET;
  444.         comData.a.x = evtmask;
  445.         if(sendData() == FALSE) 
  446.         {
  447.             return EV_ERR;
  448.         }
  449.         
  450.         return(LOWORD(comData.rc));
  451.     }
  452.     
  453.     if(hCm > HINSTANCE_ERROR)
  454.     {
  455.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(12, 0));
  456.         if((FARPROC)lpfn != (FARPROC)NULL)
  457.         {
  458.             return (*lpfn)(cid, evtmask);
  459.         }
  460.     }
  461.     return EV_ERR;    
  462. }
  463. int far pascal csetbrk(int cid)
  464. {    int (far pascal * lpfn)(int cid);
  465.     
  466.     OutputDebugString("csetbrk\n");
  467.     
  468.     if(cid == REMOTE_COM)
  469.     {    
  470.         comData.fnc = CSETBRK;
  471.         if(sendData() == FALSE) return -1;
  472.         return(LOWORD(comData.rc));
  473.     }
  474.     
  475.     if(hCm > HINSTANCE_ERROR)
  476.     {
  477.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(12+1, 0));
  478.         if((FARPROC)lpfn != (FARPROC)NULL)
  479.         {
  480.             return (*lpfn)(cid);
  481.         }
  482.     }
  483.     return -1;    
  484. }
  485. int far pascal cclrbrk(int cid)
  486. {    int (far pascal * lpfn)(int cid);
  487.     
  488.     OutputDebugString("cclrbrk\n");
  489.     
  490.     if(cid == REMOTE_COM)
  491.     {    
  492.         comData.fnc = CCLRBRK;
  493.         if(sendData() == FALSE) return -1;
  494.         return(LOWORD(comData.rc));
  495.     }
  496.     
  497.     if(hCm > HINSTANCE_ERROR)
  498.     {
  499.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(14, 0));
  500.         if((FARPROC)lpfn != (FARPROC)NULL)
  501.         {
  502.             return (*lpfn)(cid);
  503.         }
  504.     }
  505.     return -1;    
  506. }
  507. DCB far * far pascal getdcb(int cid)
  508. {    DCB far * (far pascal * lpfn)(int cid);
  509.     
  510.     OutputDebugString("getdcb\n");
  511.     
  512.     if(cid == REMOTE_COM)
  513.     {    
  514.         comData.fnc = GETDCB;
  515.         if(sendData() == FALSE) return NULL;
  516.         
  517.         _fmemcpy(&dcb, &comData.a.dcb, sizeof(dcb));
  518.         
  519.         return(&dcb);
  520.     }
  521.     
  522.     if(hCm > HINSTANCE_ERROR)
  523.     {
  524.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(15, 0));
  525.         if((FARPROC)lpfn != (FARPROC)NULL)
  526.         {
  527.             return (*lpfn)(cid);
  528.         }
  529.     }
  530.     return NULL;    
  531. }   
  532. int far pascal CommWriteString(int cid, LPSTR pbbuf, int size)
  533. {    int (far pascal * lpfn)(int cid, LPSTR pbbuf, int size);
  534.     
  535.     int x;        
  536.     
  537.     OutputDebugString("CommWriteString\n");
  538.     
  539.     if(cid == REMOTE_COM)
  540.     {    
  541.         x = 0;
  542.         
  543.         while(x < size)
  544.         {    
  545.             comData.fnc = CWSTRING;
  546.             comData.len = min(sizeof(comData.a.txt), size -x);
  547.             _fmemcpy(comData.a.txt, pbbuf+x, comData.len);
  548.             
  549.             x += comData.len;
  550.             
  551.             if(sendData() == FALSE) return -1;
  552.         }
  553.         return(x);
  554.     }
  555.     if(hCm > HINSTANCE_ERROR)
  556.     {
  557.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(19, 0));
  558.         if((FARPROC)lpfn != (FARPROC)NULL)
  559.         {
  560.             return (*lpfn)(cid, pbbuf, size);
  561.         }
  562.     }
  563.     return NULL;    
  564. }   
  565. int far pascal ReadCommString(int cid, LPSTR pbbuf, int size)
  566. {    int (far pascal * lpfn)(int cid, LPSTR pbbuf, int size);
  567.     int x;                   
  568.     
  569.     OutputDebugString("ReadCommString\n");
  570.     
  571.     if(cid == REMOTE_COM)
  572.     {    
  573.         OutputDebugString("Remote:\n");
  574.         x = 0;
  575.         
  576.         while(x < size)
  577.         {    
  578.             comData.fnc = CRSTRING;
  579.             comData.len = min(sizeof(comData.a.txt), size -x);
  580.             
  581.             if(sendData() == FALSE) return -1;
  582.             
  583.             if(comData.rc == 0) break; // no more Data
  584.             
  585.             _fmemcpy(pbbuf+x, comData.a.txt, comData.len);
  586.             
  587.             x += comData.len;
  588.         }
  589.         return(x);
  590.     }
  591.     
  592.     if(hCm > HINSTANCE_ERROR)
  593.     {
  594.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(20, 0));
  595.         if((FARPROC)lpfn != (FARPROC)NULL)
  596.         {
  597.             return (*lpfn)(cid, pbbuf, size);
  598.         }
  599.     }
  600.     return NULL;    
  601. }   
  602. int far pascal EnableNotification(int cid, HWND hwnd, WORD wInTrigger, WORD wOutTrigger)
  603. {    int (far pascal * lpfn)(int cid, HWND hwnd, WORD wInTrigger, WORD wOutTrigger);
  604.  
  605.     OutputDebugString("EnableNotification\n");
  606.     hNoti = hwnd;
  607.     
  608.     if(cid == REMOTE_COM)
  609.     {
  610.         comData.fnc = ENABLENOTI;
  611.         comData.a.noti.hwnd = hwnd;
  612.         comData.a.noti.inTrig = wInTrigger;
  613.         comData.a.noti.outTrig = wOutTrigger;
  614.         
  615.         if(sendData() == FALSE) return NULL;
  616.         
  617.         return(LOWORD(comData.rc));
  618.     }
  619.     
  620.     if(hCm > HINSTANCE_ERROR)
  621.     {
  622.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(100, 0));
  623.         if((FARPROC)lpfn != (FARPROC)NULL)
  624.         {
  625.             return (*lpfn)(cid, hwnd, wInTrigger, wOutTrigger);
  626.         }
  627.     }
  628.     return NULL;    
  629. }   
  630. void far pascal ReactivateOpenCommPorts(void)
  631. {
  632.     void (far pascal * lpfn)(void);
  633.     
  634.     OutputDebugString("ReactivateOpenCommPorts\n");
  635.     
  636.     if(hCm > HINSTANCE_ERROR)
  637.     {
  638.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(18, 0));
  639.         if((FARPROC)lpfn != (FARPROC)NULL)
  640.         {
  641.             (*lpfn)();
  642.         }
  643.     }
  644. }
  645. void far pascal SuspendOpenCommPorts(void)
  646. {
  647.     void (far pascal * lpfn)(void);
  648.     
  649.     OutputDebugString("ReactivateOpenCommPorts\n");
  650.     
  651.     if(hCm > HINSTANCE_ERROR)
  652.     {
  653.         (FARPROC)lpfn = (FARPROC)GetProcAddress(hCm, (LPSTR)MAKELONG(17, 0));
  654.         if((FARPROC)lpfn != (FARPROC)NULL)
  655.         {
  656.             (*lpfn)();
  657.         }
  658.     }
  659. }   
  660.  
  661. void getFunctions()
  662. {
  663.     static BOOL INIT = FALSE;
  664.     
  665.     if(INIT == FALSE)
  666.     {                  
  667.         OutputDebugString("Get User Functions\n");
  668.     
  669.         hUser = LoadLibrary("USER.EXE");
  670.         
  671.         (FARPROC)lpFindWindow = (FARPROC)GetProcAddress(hUser, "FINDWINDOW");
  672.         (FARPROC)lpMessageBox = (FARPROC)GetProcAddress(hUser, "MESSAGEBOX");
  673.         (FARPROC)lpPostQuitMessage = (FARPROC)GetProcAddress(hUser, "PostQuitMessage");
  674.         (FARPROC)lpSendMessage = (FARPROC)GetProcAddress(hUser, "SENDMESSAGE");    
  675.         (FARPROC)lpGetTickCount   = (FARPROC)GetProcAddress(hUser, "GETTICKCOUNT");    
  676.         FreeLibrary(hUser);
  677.         INIT = TRUE;
  678.     }    
  679. }
  680. WaitForModemCL()
  681. {
  682.     long x;
  683.     
  684.     x = lpGetTickCount();
  685.     
  686.     while((x - lpGetTickCount()) < 3600000) // 3 minuten
  687.     {
  688.         if(REMOTE_RUNNING == TRUE) return TRUE;
  689.         Yield();
  690.     }   
  691.     OutputDebugString("START REMOTE TIMEOUT\n");
  692.     return FALSE;
  693. }       
  694.         
  695. sendData()
  696. {    
  697.     HWND hCl;
  698.               
  699.     OutputDebugString("send cmd");
  700.     OutputDebugString(numtoA(comData.fnc));
  701.     
  702.     getFunctions();               
  703.     
  704.     hCl = lpFindWindow("RE_COM_CTRL", NULL);
  705.     
  706.     if(hCl == NULL)
  707.     {                
  708.         REMOTE_RUNNING = FALSE;    
  709.         
  710.         if(comData.fnc == TRMCOM)
  711.         {    comData.rc = 0;
  712.             return TRUE;
  713.         }
  714.         
  715.         if( (comData.fnc == INICOM)
  716.         ||  (comData.fnc == SETQUE))
  717.         {
  718.             OutputDebugString("START REMOTE CONTROL\n");
  719.             
  720.             WinExec("MODEMCL.EXE", SW_SHOWMINIMIZED);
  721.         
  722.             if(WaitForModemCL() == FALSE) 
  723.             {
  724.                 OutputDebugString("START CONTROL ERROR\n");
  725.                 if(hNoti != NULL) lpSendMessage(hNoti, WM_CLOSE, 0, 0L);
  726.                 return FALSE;
  727.             }
  728.             hCl = lpFindWindow("RE_COM_CTRL", NULL);
  729.         
  730.             if(hCl == NULL)
  731.             {   OutputDebugString("START CONTROL ERROR\n");
  732.                 if(hNoti != NULL) lpSendMessage(hNoti, WM_CLOSE, 0, 0L);
  733.                 return FALSE;
  734.             }                
  735.         }else
  736.         {
  737.             OutputDebugString("SEND ERROR\n");
  738.             return FALSE;
  739.         }
  740.     }
  741.     if(lpSendMessage(hCl, WM_COMMAND, 666, (LPARAM)(LPSTR)&comData) == FALSE)
  742.     {
  743.         OutputDebugString("SEND ERROR\n");
  744.         event = EV_ERR;
  745.         if(hNoti != NULL) 
  746.         {    lpSendMessage(hNoti, WM_CLOSE, 0, 0L);
  747.         }else
  748.         {                    
  749.             lpPostQuitMessage(2);
  750.         }            
  751.         return FALSE;
  752.     }           
  753.     event = comData.evmask;
  754.     
  755.     return TRUE;
  756. }
  757. void FAR PASCAL setRemoteRunning(int evmask)
  758. {
  759.     REMOTE_RUNNING = TRUE;
  760.     event = evmask; // Set by Client Timer
  761. }
  762.